#include <stdio.h>
#include "Inf_BDR6120.h"
#include "Inf_WTN6170.h"
#include "esp_task.h"
#include "Inf_SC12B.h"
#include "Inf_WS2812.h"
#include "Dri_NVS.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "Com_Debug.h"
#include "App_IO.h"
#include "string.h"
#include "Inf_FPM383.h"
#include "App_Fingerprint.h"
#include "App_BT.h"
#include "Dri_WIFI.h"

// 创建freeRTOS任务
// 创建按钮任务
void Touch_Key_Scan(void *);
// 开空间
#define APP_MAIN_STACK_SIZE 3072
// 开启优先级
#define APP_MAIN_TASK_PRIORITY 3
// 任务名字
char *APP_MAIN_TASK_NAME = "Touch_Key_Scan";
// 创建句柄
TaskHandle_t xTaskHandle = NULL;

// 创建指纹指纹
void Fingerprint_Scan(void *);
// 开空间
#define FINGERPRINT_STACK_SIZE 1024
// 开启优先级
#define FINGERPRINT_TASK_PRIORITY 3
// 任务名字
char *FINGERPRINT_TASK_NAME = "Fingerprint_Scan";
// 创建句柄
TaskHandle_t xFingerprintHandle;

// 初始化硬件
void app_main_Init(void)
{
    Inf_BDR6120_Init();
    Inf_WTN6170_Init();
    Inf_SC12B_Init();
    // 初始化LED
    Inf_WS2812_Init();
    Dri_NVS_Init();
    // 指纹设置
    Inf_FPM383_Init();
    vTaskDelay(150);
    Inf_FPM383_Sleep();

    // 蓝牙初始化
    App_BT_Init();
    // WIFI
    // Dri_WIFI_Init();
}

void app_main(void)
{
    // 初始化硬件
    app_main_Init();
    xTaskCreate(Touch_Key_Scan, APP_MAIN_TASK_NAME, APP_MAIN_STACK_SIZE, NULL, APP_MAIN_TASK_PRIORITY, &xTaskHandle);
    xTaskCreate(Fingerprint_Scan, FINGERPRINT_TASK_NAME, FINGERPRINT_STACK_SIZE, NULL, FINGERPRINT_TASK_PRIORITY, &xFingerprintHandle);
}

char key_array[100] = {0};
uint8_t key_array_len = 0;
void Touch_Key_Scan(void *)
{

    while (1)
    {
        // 获取键盘值
        // 判断状态
        Com_Status status = app_IO_Key_Click(key_array, &key_array_len);
        switch (status)
        {
        case Com_ERROR:
            key_array_len = 0;
            memset(key_array, 0, 100);
            sayIllegalOperation();
            break;
        case Com_TIMEOUT:
            key_array_len = 0;
            memset(key_array, 0, 100);
            Inf_WS2812_LEDOff();
            break;
        case Com_OK:
            App_IO_HandlerStr(key_array, key_array_len);
            MY_LOGE("key_array:%s   len:%d", key_array, key_array_len);
            memset(key_array, 0, 100);
            key_array_len = 0;
            break;
        default:
            break;
        }

        vTaskDelay(70);
    }
}

// 创建指纹指纹
void Fingerprint_Scan(void *)
{
    while (1)
    {
        App_Fingerprint_Task();
        vTaskDelay(70);
    }
}